import time
from utils.response import fail
from functools import wraps
from flask import jsonify

def rate_limit(interval=30):
    """
    限流装饰器，限制接口在指定时间间隔内只能被调用一次
    
    参数:
        interval: 时间间隔（秒），默认为30秒
    """
    # 使用字典存储每个接口的最后调用时间
    last_call_times = {}
    
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            # 获取函数名称作为唯一标识
            func_name = func.__name__
            
            # 获取当前时间戳
            current_time = time.time()
            
            # 获取该接口的最后调用时间
            last_time = last_call_times.get(func_name, 0)
            
            # 计算距离上次调用的时间间隔
            elapsed_time = current_time - last_time
            
            # 检查是否超过限制时间
            if elapsed_time < interval:
                remaining_time = interval - elapsed_time
                return fail(f'调用频率过高，请{remaining_time:.2f}秒后再试', code=429)
            
            # 更新最后一次调用时间
            last_call_times[func_name] = current_time
            
            # 执行原函数
            return func(*args, **kwargs)
        
        return wrapper
    
    return decorator    